package com.dylan.历史.基础;

import java.math.BigDecimal;

/**
 * @Auther: ankang
 * @Date: 2019/5/9 11:18
 * @Description:
 */
public class BigDecimal的坑 {

    public static void main(String[] args) {
        try {
            // 抛出异常 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
            // 通过BigDecimal的divide方法进行除法时当不整除，出现无限循环小数时，就会抛异常
            double d1 = new BigDecimal(3950).divide(new BigDecimal(7990)).doubleValue();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 解决的办法就是给divide方法设置精确的小数点，如：divide(xxxxx,2)
        double d2 = new BigDecimal(3950).divide(new BigDecimal(7990), 4, BigDecimal.ROUND_HALF_UP).doubleValue();
        System.out.println("d2=" + d2);
        try {
            // 被除数和除数都为0时，抛异常：java.lang.ArithmeticException: Division undefined
            double d3 = new BigDecimal(0).divide(new BigDecimal(0)).doubleValue();
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            // 被除数和除数都为0时，抛异常：java.lang.ArithmeticException: Division by zero
            double d4 = new BigDecimal(2).divide(new BigDecimal(0)).doubleValue();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
